package cn.kust.clock.controller;

import cn.kust.clock.pojo.vo.ClockDetailVO;
import cn.kust.clock.pojo.vo.ClockVO;
import cn.kust.clock.util.MapHttpUtil;
import cn.kust.microtourismcommon.pojo.dto.ResponseResult;
import cn.kust.clock.pojo.dto.ClockDTO;
import cn.kust.clock.service.impl.ClockServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author bjs
 * @date 2022/7/21 0021  9:14
 **/

@RestController
@RequestMapping("/api-clock/clock")
public class ClockController {

    @Autowired
    private ClockServiceImpl clockService;

    /**
     *
     * @param page 页数
     * @return 打卡的列表（标准响应的数据）
     * 测试通过
     */
    @GetMapping("/list/{page}")
    public ResponseResult<List<ClockVO>> clockList(@PathVariable("page") Integer page){
        try {
            //1.掉用clockservice层获取数据
            List<ClockVO> clockVOS = clockService.clockList(page);
            //2.将数据进行封装
            return ResponseResult.success(clockVOS);
        }catch (Exception e){
            System.out.println(e.getMessage());
            return ResponseResult.fail(5000,"你的服务器出错");
        }
    }

    /**
     *
     * @param id 打卡的id
     * @return 打卡的详细信息（标准响应的数据）
     * 测试通过
     */
    @GetMapping("/clock/{id}")
    public ResponseResult<ClockDetailVO> clock(@PathVariable("id") Long id){
        try {
            //1.调用service层获取打卡详细信息
            ClockDetailVO clock = clockService.clock(id);
            //2.将返回数据进行封装
            return ResponseResult.success(clock);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return ResponseResult.fail(5000,"你的服务器出错");
        }
    }

    /**
     *
     * @param userId 用户的id
     * @return 用户对应的打卡
     * 测试通过
     */
    @GetMapping("/myself/{userId}")
    public ResponseResult<List<ClockVO>> myselfClockList(@PathVariable("userId") Long userId){
        try {
            //1.调用service层获取打卡详细信息
            List<ClockVO> clockVOList = clockService.myselfClockList(userId);
            //2.将返回数据进行封装
            return ResponseResult.success(clockVOList);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseResult.fail(5000,"你的服务器出错");
        }
    }

    /**
     *
     * @param userId 用户列表
     * @return 用户收藏的打卡列表
     * 测试通过
     */
    @GetMapping("collection/{userId}")
    public ResponseResult<List<ClockVO>> collectClockList(@PathVariable("userId") Long userId){
        try {
            //1.调用service层获取打卡详细信息
            List<ClockVO> clockVOList = clockService.collectClockList(userId);
            //2.将返回数据进行封装
            return ResponseResult.success(clockVOList);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseResult.fail(5000,"你的服务器出错");
        }
    }

    /**
     *
     * @param clockDTO 前端传过来的form表单对象
     * @return 返回添加成功还是失败的信息
     * 测试成功
     */
    @PostMapping("/add")
    public ResponseResult clockAdd(@RequestBody ClockDTO clockDTO){
        try {
            String position = MapHttpUtil.mapGet("https://restapi.amap.com/v3/geocode/regeo?key=2d5d67f7ae8ccc0c54ff264c36005686&location=" + clockDTO.getLocation());
            int i = clockService.addClock(clockDTO,position);
            return ResponseResult.success(i);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseResult.fail(5000,"你的服务器出错");
        }
    }
}
